package com.maodou.core.ui.theme

import androidx.compose.ui.graphics.Color

/**
 * 主题颜色定义
 * 支持多套主题配色方案
 */

// ==================== 基础颜色定义 ====================

// 主色调系列
object PrimaryColors {
    val Blue50 = Color(0xFFE3F2FD)
    val Blue100 = Color(0xFFBBDEFB)
    val Blue200 = Color(0xFF90CAF9)
    val Blue300 = Color(0xFF64B5F6)
    val Blue400 = Color(0xFF42A5F5)
    val Blue500 = Color(0xFF2196F3)
    val Blue600 = Color(0xFF1E88E5)
    val Blue700 = Color(0xFF1976D2)
    val Blue800 = Color(0xFF1565C0)
    val Blue900 = Color(0xFF0D47A1)
}

// 辅助色系列
object SecondaryColors {
    val Teal50 = Color(0xFFE0F2F1)
    val Teal100 = Color(0xFFB2DFDB)
    val Teal200 = Color(0xFF80CBC4)
    val Teal300 = Color(0xFF4DB6AC)
    val Teal400 = Color(0xFF26A69A)
    val Teal500 = Color(0xFF009688)
    val Teal600 = Color(0xFF00897B)
    val Teal700 = Color(0xFF00796B)
    val Teal800 = Color(0xFF00695C)
    val Teal900 = Color(0xFF004D40)
}

// 强调色系列
object AccentColors {
    val Orange50 = Color(0xFFFFF3E0)
    val Orange100 = Color(0xFFFFE0B2)
    val Orange200 = Color(0xFFFFCC80)
    val Orange300 = Color(0xFFFFB74D)
    val Orange400 = Color(0xFFFFA726)
    val Orange500 = Color(0xFFFF9800)
    val Orange600 = Color(0xFFFB8C00)
    val Orange700 = Color(0xFFF57C00)
    val Orange800 = Color(0xFFEF6C00)
    val Orange900 = Color(0xFFE65100)
}

// 中性色系列
object NeutralColors {
    val Gray50 = Color(0xFFFAFAFA)
    val Gray100 = Color(0xFFF5F5F5)
    val Gray200 = Color(0xFFEEEEEE)
    val Gray300 = Color(0xFFE0E0E0)
    val Gray400 = Color(0xFFBDBDBD)
    val Gray500 = Color(0xFF9E9E9E)
    val Gray600 = Color(0xFF757575)
    val Gray700 = Color(0xFF616161)
    val Gray800 = Color(0xFF424242)
    val Gray900 = Color(0xFF212121)
}

// 语义化颜色
object SemanticColors {
    // 成功色
    val Success50 = Color(0xFFE8F5E8)
    val Success500 = Color(0xFF4CAF50)
    val Success700 = Color(0xFF388E3C)
    
    // 警告色
    val Warning50 = Color(0xFFFFF8E1)
    val Warning500 = Color(0xFFFF9800)
    val Warning700 = Color(0xFFF57C00)
    
    // 错误色
    val Error50 = Color(0xFFFFEBEE)
    val Error500 = Color(0xFFF44336)
    val Error700 = Color(0xFFD32F2F)
    
    // 信息色
    val Info50 = Color(0xFFE3F2FD)
    val Info500 = Color(0xFF2196F3)
    val Info700 = Color(0xFF1976D2)
}

// ==================== 主题配色方案 ====================

/**
 * 默认主题配色
 */
object DefaultThemeColors {
    // 浅色主题
    val LightPrimary = PrimaryColors.Blue500
    val LightOnPrimary = Color.White
    val LightPrimaryContainer = PrimaryColors.Blue100
    val LightOnPrimaryContainer = PrimaryColors.Blue900
    
    val LightSecondary = SecondaryColors.Teal500
    val LightOnSecondary = Color.White
    val LightSecondaryContainer = SecondaryColors.Teal100
    val LightOnSecondaryContainer = SecondaryColors.Teal900
    
    val LightTertiary = AccentColors.Orange500
    val LightOnTertiary = Color.White
    val LightTertiaryContainer = AccentColors.Orange100
    val LightOnTertiaryContainer = AccentColors.Orange900
    
    val LightBackground = Color.White
    val LightOnBackground = NeutralColors.Gray900
    val LightSurface = Color.White
    val LightOnSurface = NeutralColors.Gray900
    val LightSurfaceVariant = NeutralColors.Gray100
    val LightOnSurfaceVariant = NeutralColors.Gray700
    
    val LightError = SemanticColors.Error500
    val LightOnError = Color.White
    val LightErrorContainer = SemanticColors.Error50
    val LightOnErrorContainer = SemanticColors.Error700
    
    val LightOutline = NeutralColors.Gray400
    val LightOutlineVariant = NeutralColors.Gray200
    
    // 深色主题
    val DarkPrimary = PrimaryColors.Blue200
    val DarkOnPrimary = PrimaryColors.Blue900
    val DarkPrimaryContainer = PrimaryColors.Blue700
    val DarkOnPrimaryContainer = PrimaryColors.Blue100
    
    val DarkSecondary = SecondaryColors.Teal200
    val DarkOnSecondary = SecondaryColors.Teal900
    val DarkSecondaryContainer = SecondaryColors.Teal700
    val DarkOnSecondaryContainer = SecondaryColors.Teal100
    
    val DarkTertiary = AccentColors.Orange200
    val DarkOnTertiary = AccentColors.Orange900
    val DarkTertiaryContainer = AccentColors.Orange700
    val DarkOnTertiaryContainer = AccentColors.Orange100
    
    val DarkBackground = Color(0xFF121212)
    val DarkOnBackground = NeutralColors.Gray100
    val DarkSurface = Color(0xFF1E1E1E)
    val DarkOnSurface = NeutralColors.Gray100
    val DarkSurfaceVariant = NeutralColors.Gray800
    val DarkOnSurfaceVariant = NeutralColors.Gray300
    
    val DarkError = SemanticColors.Error500
    val DarkOnError = Color.White
    val DarkErrorContainer = SemanticColors.Error700
    val DarkOnErrorContainer = SemanticColors.Error50
    
    val DarkOutline = NeutralColors.Gray600
    val DarkOutlineVariant = NeutralColors.Gray700
}

/**
 * 绿色主题配色
 */
object GreenThemeColors {
    // 绿色系主色调
    private val Green50 = Color(0xFFE8F5E8)
    private val Green100 = Color(0xFFC8E6C9)
    private val Green200 = Color(0xFFA5D6A7)
    private val Green300 = Color(0xFF81C784)
    private val Green400 = Color(0xFF66BB6A)
    private val Green500 = Color(0xFF4CAF50)
    private val Green600 = Color(0xFF43A047)
    private val Green700 = Color(0xFF388E3C)
    private val Green800 = Color(0xFF2E7D32)
    private val Green900 = Color(0xFF1B5E20)
    
    // 浅色主题
    val LightPrimary = Green500
    val LightOnPrimary = Color.White
    val LightPrimaryContainer = Green100
    val LightOnPrimaryContainer = Green900
    
    val LightSecondary = SecondaryColors.Teal500
    val LightOnSecondary = Color.White
    val LightSecondaryContainer = SecondaryColors.Teal100
    val LightOnSecondaryContainer = SecondaryColors.Teal900
    
    val LightTertiary = AccentColors.Orange500
    val LightOnTertiary = Color.White
    val LightTertiaryContainer = AccentColors.Orange100
    val LightOnTertiaryContainer = AccentColors.Orange900
    
    val LightBackground = Color.White
    val LightOnBackground = NeutralColors.Gray900
    val LightSurface = Color.White
    val LightOnSurface = NeutralColors.Gray900
    val LightSurfaceVariant = NeutralColors.Gray100
    val LightOnSurfaceVariant = NeutralColors.Gray700
    
    val LightError = SemanticColors.Error500
    val LightOnError = Color.White
    val LightErrorContainer = SemanticColors.Error50
    val LightOnErrorContainer = SemanticColors.Error700
    
    val LightOutline = NeutralColors.Gray400
    val LightOutlineVariant = NeutralColors.Gray200
    
    // 深色主题
    val DarkPrimary = Green200
    val DarkOnPrimary = Green900
    val DarkPrimaryContainer = Green700
    val DarkOnPrimaryContainer = Green100
    
    val DarkSecondary = SecondaryColors.Teal200
    val DarkOnSecondary = SecondaryColors.Teal900
    val DarkSecondaryContainer = SecondaryColors.Teal700
    val DarkOnSecondaryContainer = SecondaryColors.Teal100
    
    val DarkTertiary = AccentColors.Orange200
    val DarkOnTertiary = AccentColors.Orange900
    val DarkTertiaryContainer = AccentColors.Orange700
    val DarkOnTertiaryContainer = AccentColors.Orange100
    
    val DarkBackground = Color(0xFF121212)
    val DarkOnBackground = NeutralColors.Gray100
    val DarkSurface = Color(0xFF1E1E1E)
    val DarkOnSurface = NeutralColors.Gray100
    val DarkSurfaceVariant = NeutralColors.Gray800
    val DarkOnSurfaceVariant = NeutralColors.Gray300
    
    val DarkError = SemanticColors.Error500
    val DarkOnError = Color.White
    val DarkErrorContainer = SemanticColors.Error700
    val DarkOnErrorContainer = SemanticColors.Error50
    
    val DarkOutline = NeutralColors.Gray600
    val DarkOutlineVariant = NeutralColors.Gray700
}

/**
 * 紫色主题配色
 */
object PurpleThemeColors {
    // 紫色系主色调
    private val Purple50 = Color(0xFFF3E5F5)
    private val Purple100 = Color(0xFFE1BEE7)
    private val Purple200 = Color(0xFFCE93D8)
    private val Purple300 = Color(0xFFBA68C8)
    private val Purple400 = Color(0xFFAB47BC)
    private val Purple500 = Color(0xFF9C27B0)
    private val Purple600 = Color(0xFF8E24AA)
    private val Purple700 = Color(0xFF7B1FA2)
    private val Purple800 = Color(0xFF6A1B9A)
    private val Purple900 = Color(0xFF4A148C)
    
    // 浅色主题
    val LightPrimary = Purple500
    val LightOnPrimary = Color.White
    val LightPrimaryContainer = Purple100
    val LightOnPrimaryContainer = Purple900
    
    val LightSecondary = SecondaryColors.Teal500
    val LightOnSecondary = Color.White
    val LightSecondaryContainer = SecondaryColors.Teal100
    val LightOnSecondaryContainer = SecondaryColors.Teal900
    
    val LightTertiary = AccentColors.Orange500
    val LightOnTertiary = Color.White
    val LightTertiaryContainer = AccentColors.Orange100
    val LightOnTertiaryContainer = AccentColors.Orange900
    
    val LightBackground = Color.White
    val LightOnBackground = NeutralColors.Gray900
    val LightSurface = Color.White
    val LightOnSurface = NeutralColors.Gray900
    val LightSurfaceVariant = NeutralColors.Gray100
    val LightOnSurfaceVariant = NeutralColors.Gray700
    
    val LightError = SemanticColors.Error500
    val LightOnError = Color.White
    val LightErrorContainer = SemanticColors.Error50
    val LightOnErrorContainer = SemanticColors.Error700
    
    val LightOutline = NeutralColors.Gray400
    val LightOutlineVariant = NeutralColors.Gray200
    
    // 深色主题
    val DarkPrimary = Purple200
    val DarkOnPrimary = Purple900
    val DarkPrimaryContainer = Purple700
    val DarkOnPrimaryContainer = Purple100
    
    val DarkSecondary = SecondaryColors.Teal200
    val DarkOnSecondary = SecondaryColors.Teal900
    val DarkSecondaryContainer = SecondaryColors.Teal700
    val DarkOnSecondaryContainer = SecondaryColors.Teal100
    
    val DarkTertiary = AccentColors.Orange200
    val DarkOnTertiary = AccentColors.Orange900
    val DarkTertiaryContainer = AccentColors.Orange700
    val DarkOnTertiaryContainer = AccentColors.Orange100
    
    val DarkBackground = Color(0xFF121212)
    val DarkOnBackground = NeutralColors.Gray100
    val DarkSurface = Color(0xFF1E1E1E)
    val DarkOnSurface = NeutralColors.Gray100
    val DarkSurfaceVariant = NeutralColors.Gray800
    val DarkOnSurfaceVariant = NeutralColors.Gray300
    
    val DarkError = SemanticColors.Error500
    val DarkOnError = Color.White
    val DarkErrorContainer = SemanticColors.Error700
    val DarkOnErrorContainer = SemanticColors.Error50
    
    val DarkOutline = NeutralColors.Gray600
    val DarkOutlineVariant = NeutralColors.Gray700
}